home *** CD-ROM | disk | FTP | other *** search
- /*
- // $VER: pm.h 10.05 (11.11.00)
- //
- // Library base, tags and macro definitions
- // for popupmenu.library.
- //
- // ©1996-2000 Henrik Isaksson
- // All Rights Reserved.
- //
- // Changes:
- //
- // 9.00 New PopupMenu structure.
- // Several new tags and updated macros.
- // 9.01 Added PM_HintBox
- // 10.0 Added PM_Toggle, PM_ExcludeShared
- // Added macro PMMXItem
- // Added two flags, PM_CHECKIT and PM_CHECKED
- // 10.05 Changed the PopupMenu structure a bit.
- // Added typedef for PopupMenu.
- // Added american english equalients for some tags.
- //
- */
-
- MODULE 'exec/libraries'
- MODULE 'utility/tagitem'
- MODULE 'intuition/classusr','intuition/classes'
-
- /*
- // Tags passed to PM_OpenPopupMenuA and PM_FilterIMsgA
- */
-
- #define PM_Menu (TAG_USER+4) /* (struct PopupMenu *) Pointer to menulist initialized by MakeMenu() */
- #define PM_Top (TAG_USER+12) /* (LONG) Top (Y) position */
- #define PM_Left (TAG_USER+13) /* (LONG) Left (X) position */
- #define PM_Code (TAG_USER+14) /* (UWORD) Obsolete. */
- #define PM_Right (TAG_USER+15) /* (LONG) X position relative to right edge */
- #define PM_Bottom (TAG_USER+16) /* (LONG) Y position relative to bottom edge */
- #define PM_MinWidth (TAG_USER+17) /* (LONG) Minimum width */
- #define PM_MinHeight (TAG_USER+18) /* (LONG) Minimum height */
- #define PM_ForceFont (TAG_USER+19) /* (struct TextFont *tf) Use this font instead of user preferences. */
- #define PM_PullDown (TAG_USER+90) /* (BOOL) Turn the menu into a pulldown menu. */
- #define PM_MenuHandler (TAG_USER+91) /* (struct Hook *) Hook that is called for each selected item, after the */
- /* menu has been closed. This tag turns on MultiSelect. */
- #define PM_AutoPullDown (TAG_USER+92) /* (BOOL) Automatic pulldown menu. (PM_FilterIMsg only) */
- #define PM_LocaleHook (TAG_USER+93) /* (struct Hook *) Locale "GetString()" hook. (Not yet implemented) */
- #define PM_CenterScreen (TAG_USER+94) /* (BOOL) Center menu on the screen */
- #define PM_UseLMB (TAG_USER+95) /* (BOOL) Left mouse button should be used to select an item */
- /* (right button selects multiple items) */
- #define PM_DRIPensOnly (TAG_USER+96) /* (BOOL) Only use the screen's DRI pens, revert to system images if necessary. */
- /* Use with care as it overrides the user's prefs! */
- #define PM_HintBox (TAG_USER+97) /* (BOOL) Close the menu when the mouse is moved. */
-
- /*
- // Tags passed to MakeItem
- */
-
- #define PM_Title (TAG_USER+20) /* (STRPTR) Item title */
- #define PM_UserData (TAG_USER+21) /* (void *) Anything, returned by OpenPopupMenu when this item is selected */
- #define PM_ID (TAG_USER+22) /* (ULONG) ID number, if you want an easy way to access this item later */
- #define PM_CommKey (TAG_USER+47) /* (char) Keyboard shortcut for this item. */
- #define PM_TitleID (TAG_USER+49) /* (ULONG) Locale string ID */
- #define PM_Object (TAG_USER+43) /* (Object *) BOOPSI object with the abillity to render this item */
-
- /* Submenu & Layout tags */
- /* PM_Sub & PM_Members are mutally exclusive */
- #define PM_Sub (TAG_USER+23) /* (PopupMenu *) Pointer to submenu list (from PM_MakeMenu) */
- #define PM_Members (TAG_USER+65) /* (PopupMenu *) Members for this group (list created by PM_MakeMenu) */
- #define PM_LayoutMode (TAG_USER+64) /* (ULONG) Layout method (PML_Horizontal / PML_Vertical) */
-
- /* Text attributes */
- #define PM_FillPen (TAG_USER+26) /* (BOOL) Make the item appear in FILLPEN */
- #define PM_Italic (TAG_USER+29) /* (BOOL) Italic text */
- #define PM_Bold (TAG_USER+30) /* (BOOL) Bold text */
- #define PM_Underlined (TAG_USER+31) /* (BOOL) Underlined text */
- #define PM_ShadowPen (TAG_USER+34) /* (BOOL) Draw text in SHADOWPEN */
- #define PM_ShinePen (TAG_USER+35) /* (BOOL) Draw text in SHINEPEN */
- #define PM_Centre (TAG_USER+36) /* (BOOL) Center the text of this item */
- #define PM_Center PM_Centre /* American version... */
- #define PM_TextPen (TAG_USER+45) /* (ULONG) Pen number for text colour of this item */
- #define PM_Shadowed (TAG_USER+48) /* (BOOL) Draw a shadow behind the text */
-
- /* Other item attributes */
- #define PM_TitleBar (TAG_USER+32) /* (BOOL) Horizontal separator bar */
- #define PM_WideTitleBar (TAG_USER+33) /* (BOOL) Same as above, but full width */
- #define PM_NoSelect (TAG_USER+25) /* (BOOL) Make the item unselectable (without visual indication) */
- #define PM_Disabled (TAG_USER+38) /* (BOOL) Disable an item */
- #define PM_Hidden (TAG_USER+63) /* (BOOL) This item is not to be drawn (nor used in the layout process) */
-
- /* Images & Icons */
- #define PM_ImageSelected (TAG_USER+39) /* (struct Image *) Image when selected, title will be rendered on top it */
- #define PM_ImageUnselected (TAG_USER+40) /* (struct Image *) Image when unselected */
- #define PM_IconSelected (TAG_USER+41) /* (struct Image *) Icon when selected */
- #define PM_IconUnselected (TAG_USER+42) /* (struct Image *) Icon when unselected */
-
- /* Check/MX items */
- #define PM_Checkit (TAG_USER+27) /* (BOOL) Leave space for a checkmark */
- #define PM_Checked (TAG_USER+28) /* (BOOL) Make this item is checked */
- #define PM_AutoStore (TAG_USER+44) /* (BOOL *) Pointer to BOOL reflecting the current state of the item */
- #define PM_Exclude (TAG_USER+37) /* (PM_IDLst *) Items to unselect or select when this gets selected */
- #define PM_ExcludeShared (TAG_USER+101) /* (BOOL) Used if the list is shared between two or more items */
- #define PM_Toggle (TAG_USER+100) /* (BOOL) Enable/disable toggling of check/mx items. Default: TRUE */
-
- /* Dynamic construction/destruction */
- #define PM_SubConstruct (TAG_USER+61) /* (struct Hook *) Constructor hook for submenus. Called before menu is opened. */
- #define PM_SubDestruct (TAG_USER+62) /* (struct Hook *) Destructor hook for submenus. Called after menu has closed. */
-
- /* Special/misc. stuff */
- #define PM_UserDataString (TAG_USER+46) /* (STRPTR) Allocates memory and copies the string to UserData. */
- #define PM_Flags (TAG_USER+24) /* (UlONG) For internal use */
- #define PM_ColourBox (TAG_USER+60) /* (UlONG) Filled rectangle (for palettes etc.) */
- #define PM_ColorBox PM_ColourBox /* For Americans... */
- /*
- // Tags passed to MakeMenu
- */
-
- #define PM_Item (TAG_USER+50) /* (PopupMenu *) Item pointer from MakeItem */
- #define PM_Dummy (TAG_USER+51) /* (void) Ignored. */
-
- /*
- // Tags passed to MakeIDList
- */
-
- #define PM_ExcludeID (TAG_USER+55) /* (ULONG) ID number of menu to deselect when this gets selected */
- #define PM_IncludeID (TAG_USER+56) /* (ULONG) ID number of menu to select when this gets selected */
- #define PM_ReflectID (TAG_USER+57) /* (ULONG) ID number of menu that should reflect the state of this one */
- #define PM_InverseID (TAG_USER+58) /* (ULONG) ID number of menu to inverse reflect the state of this one */
-
- /*
- // Tags for PM_InsertMenuItemA()
- */
-
- #define PM_Insert_Before (TAG_USER+200) /* (BOOL) Insert before the item pointed to by the following argument (N/A) */
- #define PM_Insert_BeforeID (TAG_USER+201) /* (ULONG) Insert before the first item with ID equal to the argument */
- #define PM_Insert_After (TAG_USER+202) /* (PopupMenu *) Insert after the item pointed to by the following argument */
- #define PM_Insert_AfterID (TAG_USER+203) /* (ULONG) Insert after the first item with ID equal to the argument */
- #define PM_Insert_Last (TAG_USER+205) /* (BOOL) Insert after the last item */
- #define PM_Insert_First (TAG_USER+209) /* (BOOL) Insert after the first item (which is usually invisible) */
- #define PM_InsertSub_First (TAG_USER+206) /* (PopupMenu *) Insert before the first item in the submenu */
- #define PM_InsertSub_Last (TAG_USER+207) /* (PopupMenu *) Insert at the and of a submenu */
- #define PM_InsertSub_Sorted (TAG_USER+208) /* (PopupMenu *) (N/A) */
- #define PM_Insert_Item (TAG_USER+210) /* (PopupMenu *) Item to insert, may be repeated for several items */
-
- /*
- // Layout methods
- */
-
- #define PML_None 0 /* Normal item */
- #define PML_Horizontal 1 /* Horizontal group */
- #define PML_Vertical 2 /* Vertical group */
- #define PML_Table 3 /* Table group */
- #define PML_Default 255 /* Don't use */
-
- /*
- // Macros
- */
-
- #define PMMenu(t) PM_MakeMenu(\
- PM_Item, PM_MakeItem(PM_Hidden, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
-
- #define PMMenuID(t) PM_MakeMenu(\
- PM_Item, PM_MakeItem(PM_Hidden, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_TitleID, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
-
- #define PMSubMenu(t) PM_Sub, PM_MakeMenu(PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
-
- #define PMSimpleSub PM_Sub, PM_MakeMenu(PM_Dummy, 0
- #define PMItem(t) PM_Item, PM_MakeItem(PM_Title, t
- #define PMItemID(t) PM_Item, PM_MakeItem(PM_TitleID, t
- #define PMInfo(t) PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE
- #define PMColBox(c) PM_Item, PM_MakeItem(PM_ColourBox, c
- #define PMBar PM_Item, PM_MakeItem(PM_TitleBar, TRUE
- #define PMMenuTitle(t) PM_Item, PM_MakeItem(PM_Title, t, PM_NoSelect, TRUE, PM_ShinePen, TRUE, PM_Shadowed, TRUE, PM_Center, TRUE, TAG_DONE),\
- PM_Item, PM_MakeItem(PM_WideTitleBar, TRUE, TAG_DONE)
- #define PMHoriz PM_Item, PM_MakeItem(PM_NoSelect, TRUE, PM_LayoutMode, PML_Horizontal
- #define PMVert PM_Item, PM_MakeItem(PM_NoSelect, TRUE, PM_LayoutMode, PML_Vertical
- #define PMMembers PM_Members, PM_MakeMenu(PM_Dummy, 0
-
- #define PMExcl PM_Exclude, PM_MakeIDList(
- #define ExID(id) PM_ExcludeID, id
- #define InID(id) PM_IncludeID, id
- #define RefID(id) PM_ReflectID, id
- #define InvID(id) PM_InverseID, id
-
- #define PMCheckItem(t,id) PM_Item, PM_MakeItem(PM_Title, t, PM_ID, id, PM_Checkit, TRUE
-
- #define PMMXItem(t,id) PM_Item, PM_MakeItem(PM_Title, t, PM_ID, id, PM_Checkit, TRUE, PM_Toggle, FALSE
-
- #define PMEnd TAG_DONE)
-
- #ifndef End
- #define End TAG_DONE)
- #endif
-
- #define PMERR -5
-
- /* For compatibility with old sources - DO NOT USE */
- #define PMTitleBar PMBar
- #define PMNarrowBar PMBar
- #define PMNarrowTitleBar PMBar
-
- /*
- // Library base
- */
-
- OBJECT PopupMenuBase
- Library:Library,
- SegList:ULONG,
- Flags:ULONG,
- ExecBase:PTR TO Library, /* Theese library */
- UtilityBase:PTR TO Library, /* pointers are */
- IntuitionBase:PTR TO Library, /* valid as long */
- GfxBase:PTR TO Library, /* as pm lib */
- DOSBase:PTR TO Library, /* is open. */
- NewPrefs:LONG, /* Reload prefs. */
- CxBase:PTR TO Library, /* commodities. */
- LayersBase:PTR TO Library, /* layers.library */
- CyberGfxBase:PTR TO Library /* cybergfx.lib */
-
- #define POPUPMENU_VERSION 10
- #define POPUPMENU_NAME 'popupmenu.library'
- #define OPEN_PM_LIB (PopupMenuBase= OpenLibrary(POPUPMENU_NAME, POPUPMENU_VERSION))
- #define CLOSE_PM_LIB if(PopupMenuBase) CloseLibrary((struct Library *)PopupMenuBase);
-
- /*
- // PopupMenu structure
- //
- // Note:
- // This structure may change in future versions.
- // Do not read or write fields directly, use PM_Set/GetPopupMenuAttrs()
- */
-
- OBJECT PopupMenu
- Next:PTR TO PopupMenu, /* Next item in menu */
- [CUNION
- Sub:PTR TO PopupMenu,
- Group:PTR TO PopupMenu
- ENDUNION],
- [CUNION
- Title:PTR TO UBYTE,
- TitleID:ULONG,
- Boopsi:PTR TO _Object
- ENDUNION],
- Flags:ULONG, /* Flags */
- ID:ULONG, /* Item ID */
- UserData:PTR, /* UserData */
-
- Left:WORD, /* Left pos of this item */
- Top:WORD, /* Top pos of this item */
- Width:UWORD, /* Width of this item */
- Height:UWORD, /* Height of this item */
-
- /* Very private and undocumented stuff follows. */
- /* Mess with it at your own risk. */
-
- ExtFlags:UWORD, /* Extended flags */
-
- Layout:UBYTE, /* Layout mode */
- CBox:UBYTE, /* ColourBox pen */
-
- Exclude:PTR, // TO PM_IDLst, /* Exclude/Included/Reflected items */
- AutoSetPtr:PTR TO LONG, /* Ptr to BOOL containing current state */
-
- [CUNION
- Images[2]:PTR TO Image, /* Images/Icons (0 - unselected, 1 - sel) */
- IconID:PTR TO UBYTE
- ENDUNION],
-
- CommKey:UBYTE, /* Command Key */
- Weight:UBYTE, /* Weight */
- SubConstruct:PTR TO Hook, /* SubMenu Constructor hook */
- SubDestruct:PTR TO Hook, /* SubMenu Destructor hook */
- TextPen:UBYTE, /* Pen number for item's text */
- Pad:UBYTE
-
- /* Public flags for the PopupMenu->Header.Flags field */
-
- #define PM_CHECKIT $40000000
- #define PM_CHECKED $80000000
-
-